במדריך הקודם למדנו על לולאות פשוטות ואופרטורים, במדריך זה נשפר את הידע ונעשה הקדמה לפילטרים.
מדריך קודם
Twig - אופרטורים, תנאי IF מורכבים ולולאות פשוטות
הקדמה
במדריך הקודם למדנו על לולאות פשוטים ועל אופרטורים לא ממש מיוחדים, במדריך הזה נרחיב את הידע שלנו בנושאים הללו ונילמד על אופרטורים ועזרים ליצירת השוואות בין משתנים וגם על לולאות מתקדמות ומיוחדות.
בפרק זה גם נעשה הקדמה לנושא הפילטים שזה נושא גדול ומורכב שעליו נילמד במדריך הבא, נושא הפילטרים כולל כ- 26 פילטרים שונים ומיוחדים שמשמשים כעזר.
רק חשוב לומר שהפילטרים זה לא הסוף של הלימוד, יש עוד המון דברים שיש לנו לילמוד כמו תאגים, פונקציות, כלים למתכנתים מתקדמים ועוד...
לולאות מיתקדמות
אחרי שלמדנו לכתוב לולאות פשוטות עלינו לילמוד לשפר את הלולאות בעזרת פילטרים\משתנים מיוחדים שבאים עם ה-Twig.
משתנים מיוחדים
בתוך ללולאה ניתן לגשת כמה משתנים מיוחדים:
הורדת .Html: כאן
הסברים:
{{ loop.index }}:
מביא את המספר הסידורי של סיבוב הלולאה(מתחיל מ- 1):
{% for num1 in 1..10 %}
{{ loop.index }} {# 1 2 3 4 5 6 7 8 9 10 #}
{% endfor %}
{{ loop.index }} {# 1 2 3 4 5 6 7 8 9 10 #}
{% endfor %}
{{ loop.index0 }}:
כמו loop.index רק שכאן הספירה מתחילה מ- 0:
{% for num1 in 1..10 %}
{{ loop.index0 }} {# 0 1 2 3 4 5 6 7 8 9 #}
{% endfor %}
{{ loop.index0 }} {# 0 1 2 3 4 5 6 7 8 9 #}
{% endfor %}
{{ loop.revindex }}:
כמו האינדקס רק שכאן זה הפוך - הספירה מהסוף להתחלה:
{% for num1 in 1..10 %}
{{ loop.revindex }} {# 10 9 8 7 6 5 4 3 2 1 #}
{% endfor %}
{{ loop.revindex }} {# 10 9 8 7 6 5 4 3 2 1 #}
{% endfor %}
{{ loop.revindex0 }}:
כמו loop.revindex רק שהספירה כוללת את 0:
{% for num1 in 1..10 %}
{{ loop.revindex0 }} {# 9 8 7 6 5 4 3 2 1 0 #}
{% endfor %}
{{ loop.revindex0 }} {# 9 8 7 6 5 4 3 2 1 0 #}
{% endfor %}
{{ loop.first }} {{ loop.last }}:
מחזיר אם סיבוב הלולאה הוא אחרון\ראשון תלוי במה בחרתם( first - ראשון last - אחרון):
{% for num1 in 1..10 %}
{% if loop.first %}
Hello
{% elseif loop.last %}
World!
{% endif %}
{% endfor %}
{% if loop.first %}
Hello
{% elseif loop.last %}
World!
{% endif %}
{% endfor %}
{{ loop.length }}:
מחזיר כמה סיבובים עושה הלולאה בסך הכל:
{% for num1 in 1..10 %}
{{ loop.length }} {# 10 10 10 10 10 10 10 10 10 10 #}
{% endfor %}
{{ loop.length }} {# 10 10 10 10 10 10 10 10 10 10 #}
{% endfor %}
Loop.length, loop.revindex, loop.revindex0, ו loop.last זמינים רק עבור מערכים של PHP או אובייקטים המיישמים את ממשק Countable.
הם גם לא זמינים כאשר לולאות עם מצב.
לולאות עם פילטרים\אופרטורים
בפרק הקודם למדנו על אופרטורים שונים, את חלקם אפשר ליישם גם בלולאות למשל האופרטור .. (שתי נקודות) ניתן לשימוש בלולאות כמו שהצגתי בחלק הקודם של העמוד.
שימוש לב שאפשר להשתמש בחלק מהאופרטורים גם עם אותיות:
{% for letter in 'a'..'z' %}
* {{ letter }}
{% endfor %}
* {{ letter }}
{% endfor %}
עכשיו בואו ננסה לשלב שם פילטר, לדוגמא upper שהופך את כל הטקסט בתוכו לאותיות גדולות, ככה:
{% for letter in 'a'|upper..'z'|upper %}
* {{ letter }}
{% endfor %}
* {{ letter }}
{% endfor %}
תוצאה:
* A * B * C * D * E * F * G * H * I * J * K * L * M * N * O * P * Q * R * S * T * U * V * W * X * Y * Z
כמובן שאפשר לשלב אותם בתוך גוף הלולאה:
{% for number in -5..5 %}
{{ number|abs }}
{% endfor %}
{{ number|abs }}
{% endfor %}
תנאי עם לולאות
ניתן לשלב בין תנאי IF ללולאות, מה שעלינו לעשות זה אחרי המשפט היכן לחפש להוסיף את התנאי, למשל:
{% for i in 0..10 if (condition) %}
{# loop #}
{% endfor %}
{# loop #}
{% endfor %}
דוגמא:
{% set varr = true %}
{% for i in 0..10 if varr %}
* {{ i }}
{% endfor %}
{% for i in 0..10 if varr %}
* {{ i }}
{% endfor %}
תוצאה:
* 0 * 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10
עכשיו נסו לשנות א הערך של VARR ל FALSE ככה:
{% set varr = false %}
{% for i in 0..10 if varr %}
* {{ i }}
{% endfor %}
{% for i in 0..10 if varr %}
* {{ i }}
{% endfor %}
כעת הלולאה לא מתבצעת כי התנאי לא מיתקיים.
גם כאן ניתן להשתמש באופרטורים על מנת ליצור השוואה בין שתים או יותר מישתנים
אופרטורים מיוחדים
אני במקום Twig לא היתי מגדיר את זה אופרטור אלה פונקצייה אבל אנחנו ניצמדים למה שהם כתבו לכן ניקרא לזה אופרטורים.
בצורת הכתיבה הם יותר דומים לפונקצייות.
רשימת אופרטורים מיוחדים
הורדה: כאן
דוגמאות לכל אופרטור
{% if loop.index is divisibleby(3) %}
...
{% endif %}
...
{% endif %}
{{ var is null }}
{{ var is even }}
{{ var is odd }}
{% if foo.attribute is sameas(false) %}
the foo attribute really is the ``false`` PHP value
{% endif %}
the foo attribute really is the ``false`` PHP value
{% endif %}
{% if post.status is constant('Post::PUBLISHED') %}
the status attribute is exactly the same as Post::PUBLISHED
{% endif %}
the status attribute is exactly the same as Post::PUBLISHED
{% endif %}
{# defined works with variable names #}
{% if foo is defined %}
...
{% endif %}
{# and attributes on variables names #}
{% if foo.bar is defined %}
...
{% endif %}
{% if foo['bar'] is defined %}
...
{% endif %}
{% if var is defined and foo.method(var) is defined %}
...
{% endif %}
{% if foo is defined %}
...
{% endif %}
{# and attributes on variables names #}
{% if foo.bar is defined %}
...
{% endif %}
{% if foo['bar'] is defined %}
...
{% endif %}
{% if var is defined and foo.method(var) is defined %}
...
{% endif %}
{# evaluates to true if the foo variable is null, false, an empty array, or the empty string #}
{% if foo is empty %}
...
{% endif %}
{% if foo is empty %}
...
{% endif %}
{# evaluates to true if the foo variable is iterable #}
{% if users is iterable %}
{% for user in users %}
Hello {{ user }}!
{% endfor %}
{% else %}
{# users is probably a string #}
Hello {{ users }}!
{% endif %}
{% if users is iterable %}
{% for user in users %}
Hello {{ user }}!
{% endfor %}
{% else %}
{# users is probably a string #}
Hello {{ users }}!
{% endif %}
פילטרים - הקדמה
פילטר הינו מסנן שמאפשר לסנן את התוצאות או בעתם להמיר אותו למשהו אחר.
ב- Twig קיימים 26 פילטרים שונים ביותר שמאפשרים לשנות את המשתנה מקצה לקצה וליצור דברים מדהימים.
דברים שאנו עושים ב PHP בהמון שורות ניתנים לעשות ב- Twig בכמה אותיות פשוטות.
בנוסף Twig מאפשר ליצור פחלטרים מותאמים אישית שעליהם נילמד בחלק מתקדם יותר בחלק של Twig - מתכנתים ברמה גבוהה.
בפרק הבא
* פילטרים חלק א'
תגובות לכתבה:
תודה רבה על המדריך !
"הם גם לא זמינים כאשר לולאות עם מצב." - ההרגשה היא שתרגמת את הדוקומנטציה עםgoogle translate.
הטקסט המקורי הוא - "They are also not available when looping with a condition".
מקור: http://twig.sensiolabs.org/doc/tags/for.html
תלמד אנגלית.